#ifndef BASEDB_H
#define BASEDB_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QSqlTableModel>
#include <QHash>

class BaseDB : public QObject
{
    Q_OBJECT
public:
    explicit BaseDB(QObject *parent = nullptr);
    //打开数据库，需要数据库名字+数据库类型（默认为sqlite），后续看是否能够升级为自动识别数据库类型
    bool open(QString db_name, QString db_type = "QSQLITE");
    void close();   //关闭数据库

    QStringList getTableNames();        //获取数据库所有表名
    bool creatTab(QString tabStruct);   //创建数据库表 参数：SQL语句
    bool deleteTab(QString tabName);    //删除数据库表 参数：表名

    QStringList getTableIndexName(QString tabNmae);       //获取数据库表的所有段名，顺序依次
    QStringList getTableIndexType(QString tabNmae);       //获取数据库表的所有段类型，顺序依次
    bool insetData(QString tabName, QStringList dataList);
    bool insetData(QString tabName, QStringList indexList,QStringList dataList);     //插入数据（添加）
    bool updateData(QString tabName, QString filterSql, QString indexData);     //更新数据库数据

    QSqlTableModel *getTableModel(QString tableName);   //获取数据库中的表格模型
    QSqlTableModel *getTableModel(int i);               //获取表格模型
    bool relaseTableModel(QString tableName);
    void relaseAllModel();      //释放所有创建的表格模型内存

signals:

public slots:

private:
    QSqlDatabase database;  //数据库类
    QSqlQuery *sql_query;

    QString dbPath; // 打开的数据库名字
    QString dbType; //打开的数据库类型

    QList<QSqlTableModel *> tableModelList; //数据库表的Model，需要时才创建。
};

#endif // DBMANAGER_H
